﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocios;
using objetos;
using publico;
using System.Transactions;
using System.Text;
using System.Data;

namespace softsales.pagina.pedido
{
    public partial class pedido_fechar : System.Web.UI.Page
    {
        // pedido
        OBJ_TB_PEDIDO o_tb_pedido = new OBJ_TB_PEDIDO();
        BLL_TB_PEDIDO b_tb_pedido = new BLL_TB_PEDIDO();

        // pedido ITEM
        BLL_TB_PEDIDO_ITEM b_tb_pedido_item = new BLL_TB_PEDIDO_ITEM();
        OBJ_TB_PEDIDO_ITEM o_tb_pedido_item = new OBJ_TB_PEDIDO_ITEM();

        // pedido USUARIO
        OBJ_TB_PEDIDO_HISTORICO o_tb_pedido_historico = new OBJ_TB_PEDIDO_HISTORICO();
        BLL_TB_PEDIDO_HISTORICO b_tb_pedido_historico = new BLL_TB_PEDIDO_HISTORICO();


        // CADASTRO
        OBJ_TB_CADASTRO o_tb_cadastro = new OBJ_TB_CADASTRO();
        BLL_TB_CADASTRO b_tb_cadastro = new BLL_TB_CADASTRO();

        // ENDERECO CADASTRO
        OBJ_TB_ENDERECO_CADASTRO o_tb_endereco_cadastro = new OBJ_TB_ENDERECO_CADASTRO();
        BLL_TB_ENDERECO_CADASTRO b_tb_endereco_cadastro = new BLL_TB_ENDERECO_CADASTRO();

        // FORMA PAGAMENTO
        BLL_TB_FORMA_PAGAMENTO b_tb_forma_pagamento = new BLL_TB_FORMA_PAGAMENTO();

        // CONDICAO PAGAMENTO
        BLL_TB_CONDICAO_PAGAMENTO b_tb_condicao_pagamento = new BLL_TB_CONDICAO_PAGAMENTO();
        OBJ_TB_CONDICAO_PAGAMENTO o_tb_condicao_pagamento = new OBJ_TB_CONDICAO_PAGAMENTO();

        // EMPRESA
        BLL_TB_EMPRESA b_tb_empresa = new BLL_TB_EMPRESA();
        OBJ_TB_EMPRESA o_tb_empresa = new OBJ_TB_EMPRESA();

        BLL_TB_EMPRESA_CENTRO_CUSTO b_tb_empresa_centro_custo = new BLL_TB_EMPRESA_CENTRO_CUSTO();
        OBJ_TB_EMPRESA_CENTRO_CUSTO o_tb_empresa_centro_custo = new OBJ_TB_EMPRESA_CENTRO_CUSTO();

        BLL_TB_TIPO_ENDERECO b_tb_tipo_endereco = new BLL_TB_TIPO_ENDERECO();

        BLL_TB_TIPO_LOGRADOURO b_tb_tipo_logradouro = new BLL_TB_TIPO_LOGRADOURO();

        BLL_TB_PAISES b_tb_paises = new BLL_TB_PAISES();

        BLL_TB_CIDADE b_tb_cidade = new BLL_TB_CIDADE();
        OBJ_TB_CIDADE o_tb_cidade = new OBJ_TB_CIDADE();

        BLL_TB_UF b_tb_uf = new BLL_TB_UF();
        OBJ_TB_UF o_tb_uf = new OBJ_TB_UF();

        // pedido
        BLL_TB_TIPO_SITUACAO_PEDIDO b_tb_situacao_pedido = new BLL_TB_TIPO_SITUACAO_PEDIDO();

        // UNIDADE MEDIDA
        BLL_TB_UNIDADE_MEDIDA b_tb_unidade_medida = new BLL_TB_UNIDADE_MEDIDA();

        // PRODUTO
        OBJ_TB_PRODUTO o_tb_produto = new OBJ_TB_PRODUTO();
        BLL_TB_PRODUTO b_tb_produto = new BLL_TB_PRODUTO();

        // LOG ERRO
        BLL_TB_LOG_ERRO b_tb_log_erro = new BLL_TB_LOG_ERRO();

        // operacao
        BLL_TB_PEDIDO_OPERACAO b_tb_pedido_operacao = new BLL_TB_PEDIDO_OPERACAO();

        BLL_TB_USUARIO b_tb_usuario = new BLL_TB_USUARIO();

        // orcamento
        OBJ_TB_ORCAMENTO o_tb_orcamento = new OBJ_TB_ORCAMENTO();
        BLL_TB_ORCAMENTO b_tb_orcamento = new BLL_TB_ORCAMENTO();

        // orcamento item
        BLL_TB_ORCAMENTO_ITEM b_tb_orcamento_item = new BLL_TB_ORCAMENTO_ITEM();
        OBJ_TB_ORCAMENTO_ITEM o_tb_orcamento_item = new OBJ_TB_ORCAMENTO_ITEM();

        // centro custo
        BLL_TB_CENTRO_CUSTO b_tb_centro_custo = new BLL_TB_CENTRO_CUSTO();
        OBJ_TB_CENTRO_CUSTO o_tb_centro_custo = new OBJ_TB_CENTRO_CUSTO();

        // banco conta corrente
        BLL_TB_BANCO_CONTA_CORRENTE b_tb_banco_conta_corrente = new BLL_TB_BANCO_CONTA_CORRENTE();
        OBJ_TB_BANCO_CONTA_CORRENTE o_tb_banco_conta_corrente = new OBJ_TB_BANCO_CONTA_CORRENTE();

        BLL_TB_CONTA_CONTABIL b_tb_conta_contabil = new BLL_TB_CONTA_CONTABIL();
        OBJ_TB_CONTA_CONTABIL o_tb_conta_contabil = new OBJ_TB_CONTA_CONTABIL();

        BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
        OBJ_TB_CONTA_PAGAR o_tb_conta_pagar = new OBJ_TB_CONTA_PAGAR();

        BLL_TB_CONTA_PAGAR b_tb_conta_pagar = new BLL_TB_CONTA_PAGAR();
        OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();

        BLL_TB_CONDICAO_PAGAMENTO_PRAZO b_tb_condicao_pagamento_prazo = new BLL_TB_CONDICAO_PAGAMENTO_PRAZO();


        private int id_operacao { get; set; }
        private int id_empresa { get; set; }
        private int id_pedido { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (PUB_SESSAO.Logado())
            {

                if (Request["id_operacao"] != null)
                {
                    id_operacao = Convert.ToInt32(Request["id_operacao"].ToString());

                }


                if (!IsPostBack)
                {

                    TituloPagina();

                    // dropdownlist

                    b_tb_condicao_pagamento.PreencheControle(DDL_ID_CONDICAO_PAGAMENTO, true);
                    b_tb_empresa.PreencheControle(DDL_ID_EMPRESA, true);
                    b_tb_forma_pagamento.PreencheControle(DDL_ID_FORMA_PAGAMENTO, true);
                    b_tb_situacao_pedido.PreencheControle(DDL_ID_SITUACAO_PEDIDO, true);
                    b_tb_pedido_operacao.PreencheControle(DDL_ID_OPERACAO, false);
                    b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, true);
                    b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, true);
                    b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, true);               

                    DDL_ID_OPERACAO.SelectedValue = id_operacao.ToString();
                    DDL_ID_OPERACAO.Enabled = false;


                    TXT_DT_EMISSAO.Text = DateTime.Now.ToShortDateString();

                    int aberto = (int)PUB_ENUM.PEDIDO_SITUACAO.ABERTO;
                    DDL_ID_SITUACAO_PEDIDO.SelectedValue = aberto.ToString();
                    DDL_ID_SITUACAO_PEDIDO.Enabled = false;

                    TAB_CONTAINER.ActiveTab = TAB_PEDIDO;
                    PNL_GERAR_FINANCEIRO.Visible = false;

                    TXT_VALOR_DESCONTO.Text = "0,00";
                    TXT_VALOR_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_DESCONTO.Text = "0,00";
                    TXT_VALOR_TOTAL_ITEM.Text = "0,00";
                    TXT_VALOR_TOTAL_PEDIDO.Text = "0,00";
                    TXT_VALOR_TOTAL_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_PRODUTO.Text = "0,00";
                    TXT_VALOR_TOTAL_SERVICO.Text = "0,00";
                    TXT_VALOR_UNITARIO.Text = "0,00";
                    TXT_QTD.Text = "1";


                    if (Request["id"] != null)
                    {
                        if (PUB_FUNCOES.ApenasInteiro(Request["id"].ToString()))
                        {
                            Editar(Request["id"].ToString());
                        }


                    }


                }
                else
                {

                    if (Session["id_cadastro"] != null)
                    {
                        int id_cadastro = Convert.ToInt32(Session["id_cadastro"].ToString());

                        o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(id_cadastro);

                        TXT_ID_CLI_FOR.Text = o_tb_cadastro.id.ToString();
                        TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
                        Session.Remove("id_cadastro");

                    }

                    if (Session["id_produto"] != null)
                    {
                        int id_produto = Convert.ToInt32(Session["id_produto"].ToString());

                        o_tb_produto = b_tb_produto.SelecionarObjetoPorId(id_produto);

                        TXT_ID_PRODUTO_SERVICO.Text = id_produto.ToString();
                        TXT_DESCRICAO.Text = o_tb_produto.descricao.ToString();
                        TXT_VALOR_UNITARIO.Text = PUB_FUNCOES.TrataDecimal(o_tb_produto.valor_venda.ToString());
                        TXT_VALOR_DESCONTO.Text = "0,00";
                        TXT_VALOR_OUTRO.Text = "0,00";
                        TXT_VALOR_TOTAL_ITEM.Text = PUB_FUNCOES.TrataDecimal(o_tb_produto.valor_venda.ToString());

                    }

                }


            }
        }

        private void Editar(string id)
        {

            try
            {
                o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(id));

                if (o_tb_pedido != null)
                {
                    o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(o_tb_pedido.id_cadastro);

                }

                HF_ID.Value = o_tb_pedido.id.ToString();
                id_pedido = o_tb_pedido.id;
                id_empresa = o_tb_pedido.id_empresa;

                if (o_tb_pedido != null)
                {
                    TXT_ID_CLI_FOR.Text = o_tb_pedido.id_cadastro.ToString();
                    TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
                    TXT_NUM_ORCAMENTO.Text = o_tb_pedido.id_orcamento.ToString();

                    DDL_ID_EMPRESA.SelectedValue = o_tb_pedido.id_empresa.ToString();
                    TXT_NUM_PEDIDO.Text = o_tb_pedido.id.ToString();
                    TXT_NUM_ORCAMENTO.Text = o_tb_pedido.id_orcamento.ToString();
                    DDL_ID_FORMA_PAGAMENTO.SelectedValue = o_tb_pedido.id_forma_pagamento.ToString();
                    DDL_ID_CONDICAO_PAGAMENTO.SelectedValue = o_tb_pedido.id_condicao_pagamento.ToString();
                    TXT_DT_EMISSAO.Text = PUB_FUNCOES.FormataDataBR(o_tb_pedido.dt_emissao.ToString());
                    TXT_DT_FECHAMENTO.Text = PUB_FUNCOES.FormataDataBR(o_tb_pedido.dt_fechamento.ToString());
                    TXT_DT_ENTREGA_RECEBIMENTO.Text = o_tb_pedido.dt_entrega_recebimento.ToString();
                    DDL_ID_OPERACAO.SelectedValue = o_tb_pedido.id_operacao.ToString();
                    TXT_PLACA.Text = o_tb_pedido.veiculo_placa.ToString();
                    TXT_KM.Text = o_tb_pedido.veiculo_km.ToString();
                    DDL_ID_SITUACAO_PEDIDO.SelectedValue = o_tb_pedido.id_situacao_pedido.ToString();
                    TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_servico.ToString());
                    TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_produto.ToString());
                    TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_desconto.ToString());
                    TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_outro.ToString());
                    TXT_VALOR_TOTAL_PEDIDO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_pedido.ToString());
                    TXT_OBSERVACAO.Text = o_tb_pedido.observacao.ToString();


                    DDL_ID_EMPRESA.Enabled = false;
                    TXT_NUM_PEDIDO.Enabled = false;
                    TXT_NUM_ORCAMENTO.Enabled = false;
                    TXT_ID_CLI_FOR.Enabled = false;
                    IMG_BTN_ABRIR_MODAL_CLI_FOR.Visible = false;
                    IMG_BTN_ABRIR_MODAL_ORCAMENTO.Visible = false;

                    CarregaGrid();

                    CarregaParametrosFinanceiros();

                }


            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar carregar o formulário de pedido.");
            }



        }


        private void TituloPagina()
        {
            if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.SAIDA))
            {
                LBL_TITULO_PAGINA.Text = string.Format("Pedido Venda Nº {0}", HF_ID.Value);
            }
            else
            {
                LBL_TITULO_PAGINA.Text = string.Format("Pedido Compra Nº {0}", HF_ID.Value);
            }

        }
        private void CarregaParametrosFinanceiros()
        {
            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
            {
                b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, string.Format("tb_banco_conta_corrente.id_empresa = {0}", DDL_ID_EMPRESA.SelectedValue), "", true);

                b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, string.Format("tb_centro_custo.id in (select id_centro_custo from tb_empresa_centro_custo where id_empresa = {0})", DDL_ID_EMPRESA.SelectedValue), "", true);

                if (DDL_ID_CENTRO_CUSTO.Items.Count > 0)
                {
                    if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                    {
                        DDL_ID_CENTRO_CUSTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.CENTRO_CUSTO.COMPRAS);
                    }
                    else
                    {
                        DDL_ID_CENTRO_CUSTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.CENTRO_CUSTO.VENDAS);
                    }

                    if (DDL_ID_CENTRO_CUSTO.SelectedValue != string.Empty)
                    {
                        b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, string.Format("tb_conta_contabil.id in (select id_conta_contabil from tb_centro_custo_conta_contabil where id_centro_custo = {0})", DDL_ID_CENTRO_CUSTO.SelectedValue), "", false);
                    }

                }
                else
                {
                    Master.MSG_ALERTA("Erro ao carregar a relação centro de custo x empresa, cadastre a tabela centro de custo x empresa.");
                }


            }

        }

        //private void CarregaFinanceiro(int id_empresa, int id_pedido, int id_operacao)
        //{
        //    BLL_TB_CONTA_PAGAR b_tb_conta_pagar = new BLL_TB_CONTA_PAGAR();
        //    BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
        //    OBJ_TB_CONTA_PAGAR o_tb_conta_pagar = new OBJ_TB_CONTA_PAGAR();
        //    OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();
        //    List<OBJ_TB_CONTA_RECEBER> lista_conta_receber = new List<OBJ_TB_CONTA_RECEBER>();
        //    List<OBJ_TB_CONTA_PAGAR> lista_conta_pagar = new List<OBJ_TB_CONTA_PAGAR>();


        //    try
        //    {
        //        decimal valor_lancado = 0;
        //        decimal valor_pedido = 0;

        //        valor_pedido = Convert.ToDecimal(TXT_VALOR_TOTAL_PEDIDO.Text);

        //        if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
        //        {
        //            lista_conta_pagar = b_tb_conta_pagar.ListaContaPagarPedido(id_empresa, id_pedido);

        //            for (int i = 0; i <= lista_conta_pagar.Count - 1; i++)
        //            {
        //                valor_lancado = valor_lancado + lista_conta_pagar[i].valor_parcela;
        //            }

        //            GRV_TB_FINANCEIRO.DataSource = lista_conta_pagar;
        //            GRV_TB_FINANCEIRO.DataBind();
        //        }
        //        else
        //        {
        //            lista_conta_receber = b_tb_conta_receber.ListaContaReceberPedido(id_empresa, id_pedido);

        //            for (int i = 0; i <= lista_conta_receber.Count - 1; i++)
        //            {
        //                valor_lancado = valor_lancado + lista_conta_receber[i].valor_parcela;
        //            }
        //            GRV_TB_FINANCEIRO.DataSource = lista_conta_receber;
        //            GRV_TB_FINANCEIRO.DataBind();
        //        }

        //        TXT_VALOR_SALDO.Text = string.Format("{0}", valor_pedido - valor_lancado);
        //        TXT_VALOR_PARCELA.Text = string.Format("{0}", valor_pedido - valor_lancado);


        //        if (GRV_TB_FINANCEIRO.Rows.Count > 0)
        //        {
        //            PNL_GERAR_FINANCEIRO.Visible = true;
        //        }
        //    }
        //    catch (Exception)
        //    {

        //        throw;
        //    }



        //}

        protected void BTN_INCLUIR_ITEM_Click(object sender, EventArgs e)
        {
            try
            {

                using (TransactionScope scope = new TransactionScope())
                {

                    if (HF_ID.Value == string.Empty)
                    {
                        IncluirPedido();
                        IncluirPedidoItem();
                        AtualizaValorPedido();
                        TotalPedido();
                        CarregaGrid();

                    }
                    else
                    {
                        IncluirPedidoItem();
                        AtualizaValorPedido();
                        TotalPedido();
                        CarregaGrid();

                    }
                    Master.MSG_INFO(string.Format("Pedido Nº {0} foi criado, quando terminar de preencher todos os campos clique em salvar.", HF_ID.Value));

                    scope.Complete();
                }



            }
            catch (Exception)
            {

                throw;
            }
        }

        private void AtualizaValorPedido()
        {

            b_tb_pedido_item.AtualizaTotalPedido(Convert.ToInt32(HF_ID.Value));

        }


        private void TotalPedido()
        {

            o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

            TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_desconto.ToString());
            TXT_VALOR_TOTAL_PEDIDO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_pedido.ToString());
            TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_outro.ToString());
            TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_produto.ToString());
            TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_servico.ToString());
        }

        private void IncluirPedido()
        {

            int id_pedido = 0;

            if (TXT_DT_APROVACAO.Text != string.Empty)
                o_tb_pedido.dt_aprovacao = Convert.ToDateTime(TXT_DT_APROVACAO.Text);

            o_tb_pedido.dt_checkin = null;
            if (TXT_DT_EMISSAO.Text != string.Empty)
                o_tb_pedido.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);

            if (TXT_DT_ENTREGA_RECEBIMENTO.Text != string.Empty)
                o_tb_pedido.dt_entrega_recebimento = Convert.ToDateTime(TXT_DT_ENTREGA_RECEBIMENTO.Text);

            if (TXT_DT_FECHAMENTO.Text != string.Empty)
                o_tb_pedido.dt_fechamento = Convert.ToDateTime(TXT_DT_FECHAMENTO.Text);

            if (TXT_ID_CLI_FOR.Text != string.Empty)
                o_tb_pedido.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);

            if (DDL_ID_SITUACAO_PEDIDO.SelectedValue != string.Empty)
                o_tb_pedido.id_situacao_pedido = Convert.ToInt32(DDL_ID_SITUACAO_PEDIDO.SelectedValue);

            if (DDL_ID_OPERACAO.SelectedValue != string.Empty)
                o_tb_pedido.id_operacao = Convert.ToInt32(DDL_ID_OPERACAO.SelectedValue);

            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
                o_tb_pedido.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);

            if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);

            if (DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);

            o_tb_pedido.id_orcamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_NUM_ORCAMENTO.Text));


            o_tb_pedido.id_usuario_checkin = null;
            o_tb_pedido.id_usuario_criador = PUB_SESSAO.Id;
            o_tb_pedido.informacao_adicional = string.Empty;
            o_tb_pedido.observacao = TXT_OBSERVACAO.Text.Trim();
            o_tb_pedido.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
            o_tb_pedido.valor_total_pedido = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PEDIDO.Text));
            o_tb_pedido.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
            o_tb_pedido.valor_total_produto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PRODUTO.Text));
            o_tb_pedido.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));
            o_tb_pedido.veiculo_km = TXT_KM.Text.Trim();
            o_tb_pedido.veiculo_placa = TXT_PLACA.Text;

            id_pedido = b_tb_pedido.Incluir(o_tb_pedido);

            HF_ID.Value = id_pedido.ToString();
            TXT_NUM_PEDIDO.Text = id_pedido.ToString();

        }


        private void AlterarPedido()
        {
            o_tb_pedido.id = Convert.ToInt32(HF_ID.Value);

            if (TXT_DT_APROVACAO.Text != string.Empty)
                o_tb_pedido.dt_aprovacao = Convert.ToDateTime(TXT_DT_APROVACAO.Text);

            o_tb_pedido.dt_checkin = null;
            if (TXT_DT_EMISSAO.Text != string.Empty)
                o_tb_pedido.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);

            if (TXT_DT_ENTREGA_RECEBIMENTO.Text != string.Empty)
                o_tb_pedido.dt_entrega_recebimento = Convert.ToDateTime(TXT_DT_ENTREGA_RECEBIMENTO.Text);

            if (TXT_DT_FECHAMENTO.Text != string.Empty)
                o_tb_pedido.dt_fechamento = Convert.ToDateTime(TXT_DT_FECHAMENTO.Text);

            if (TXT_ID_CLI_FOR.Text != string.Empty)
                o_tb_pedido.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);

            o_tb_pedido.id_situacao_pedido = (int)PUB_ENUM.PEDIDO_SITUACAO.FECHADO;

            if (DDL_ID_OPERACAO.SelectedValue != string.Empty)
                o_tb_pedido.id_operacao = Convert.ToInt32(DDL_ID_OPERACAO.SelectedValue);

            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
                o_tb_pedido.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);

            if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);

            if (DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);

            o_tb_pedido.id_orcamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_NUM_ORCAMENTO.Text));


            o_tb_pedido.id_usuario_checkin = null;
            o_tb_pedido.id_usuario_criador = PUB_SESSAO.Id;
            o_tb_pedido.informacao_adicional = string.Empty;
            o_tb_pedido.observacao = TXT_OBSERVACAO.Text.Trim();
            o_tb_pedido.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
            o_tb_pedido.valor_total_pedido = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PEDIDO.Text));
            o_tb_pedido.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
            o_tb_pedido.valor_total_produto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PRODUTO.Text));
            o_tb_pedido.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));
            o_tb_pedido.veiculo_km = TXT_KM.Text.Trim();
            o_tb_pedido.veiculo_placa = TXT_PLACA.Text;

            b_tb_pedido.Alterar(o_tb_pedido);
        }

        private void IncluirPedidoHistorico(string historico)
        {
            o_tb_pedido_historico.desc_pedido_historico = historico;
            o_tb_pedido_historico.dt_atualizacao = DateTime.Now;
            o_tb_pedido_historico.id_pedido = Convert.ToInt32(HF_ID.Value);
            o_tb_pedido_historico.id_usuario = PUB_SESSAO.Id;
            b_tb_pedido_historico.Incluir(o_tb_pedido_historico);
        }

        private void IncluirPedidoItem()
        {

            o_tb_produto = b_tb_produto.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_PRODUTO_SERVICO.Text));

            o_tb_pedido_item.descricao = TXT_DESCRICAO.Text;
            o_tb_pedido_item.ean = PUB_FUNCOES.TrataInteiro(o_tb_produto.ean.ToString());
            o_tb_pedido_item.id_pedido = Convert.ToInt32(HF_ID.Value);
            o_tb_pedido_item.id_produto_servico = o_tb_produto.id;
            o_tb_pedido_item.id_tipo_item = o_tb_produto.id_tipo_item;
            o_tb_pedido_item.id_unidade_medida = Convert.ToInt32(o_tb_produto.id_unidade_medida);
            o_tb_pedido_item.qtd = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_QTD.Text));
            o_tb_pedido_item.valor_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
            o_tb_pedido_item.valor_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
            o_tb_pedido_item.valor_total = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_ITEM.Text));
            o_tb_pedido_item.valor_unitario = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_UNITARIO.Text));
            o_tb_pedido_item.sit_total_nota = 1;
            b_tb_pedido_item.Incluir(o_tb_pedido_item);
        }

        public void CarregaGrid()
        {

            try
            {
                StringBuilder sb = new StringBuilder();

                DataSet ds = new DataSet();
                List<string> lista = new List<string>();

                lista.Add(string.Format(" tb_pedido_item.id_pedido = {0}", HF_ID.Value));

                sb.Append(string.Join(" and ", lista.ToArray()));


                ds = b_tb_pedido_item.Selecionar(sb.ToString(), PUB_PAGINACAO.Sort, PUB_PAGINACAO.PageIndex, PUB_PAGINACAO.PageSize);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    GRV_TB_PEDIDO_ITEM.DataSource = ds;
                    GRV_TB_PEDIDO_ITEM.DataBind();
                    //  PUB_PAGINACAO.Paginacao(true);
                }
                else
                {
                    GRV_TB_PEDIDO_ITEM.EmptyDataText = "Nenhum registro foi encontrado";
                    GRV_TB_PEDIDO_ITEM.DataBind();
                }
            }
            catch (Exception)
            {

                throw;
            }



        }

        protected void GRV_TB_PEDIDO_ITEM_Sorting(object sender, GridViewSortEventArgs e)
        {
            PUB_PAGINACAO.Sort = e.SortExpression;
            if (PUB_PAGINACAO.SortDirection == SortDirection.Ascending)
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Descending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + " " + PUB_PAGINACAO.DESCENDENTE;
            }
            else
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Ascending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + "  " + PUB_PAGINACAO.ASCENDENTE;
            }

            CarregaGrid();

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {

            int id_pedido = 0;
            int id_empresa = 0;
            int id_cadastro = 0;
            int id_conta_contabil = 0;
            int id_forma_pagamento = 0;
            int id_centro_custo = 0;
            int id_condicao_pagamento = 0;
            int id_banco_conta_corrente = 0;
            decimal valor_parcela = 0;
            decimal valor_pedido = 0;

            string msg = string.Empty;
            try
            {
                id_pedido = Convert.ToInt32(HF_ID.Value);
                if (GRV_TB_PEDIDO_ITEM.Rows.Count > 0 && GRV_TB_FINANCEIRO.Rows.Count > 0)
                {
                    if (TXT_ID_CLI_FOR.Text != string.Empty && TXT_NOME_CLI_FOR.Text != string.Empty
                    && DDL_ID_EMPRESA.SelectedValue != string.Empty)
                    {
                        using (TransactionScope scope = new TransactionScope())
                        {
                            AlterarPedido();

                            if (CHK_GERAR_FINANCEIRO.Checked)
                            {


                             
                                    o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

                                    id_pedido = o_tb_pedido.id;
                                    id_cadastro = o_tb_pedido.id_cadastro;
                                    id_empresa = o_tb_pedido.id_empresa;
                                    id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
                                    id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
                                    id_conta_contabil = Convert.ToInt32(DDL_ID_CONTA_CONTABIL.SelectedValue);
                                    id_centro_custo = Convert.ToInt32(DDL_ID_CENTRO_CUSTO.SelectedValue);
                                    id_banco_conta_corrente = Convert.ToInt32(DDL_ID_BANCO_CONTA_CORRENTE.SelectedValue);
                                    valor_parcela = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_PARCELA.Text));
                                    valor_pedido = o_tb_pedido.valor_total_pedido;

                                    if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                                    {

                                        // CONTA RECEBER
                                        foreach (DataRow dr in b_tb_conta_receber.Dt_conta_receber.Rows)
                                        {

                                            o_tb_conta_receber.id_empresa = Convert.ToInt32(dr["id_empresa"].ToString());
                                            o_tb_conta_receber.id_conta_contabil = Convert.ToInt32(dr["id_conta_contabil"].ToString());
                                            o_tb_conta_receber.id_tipo_especie = null;
                                            o_tb_conta_receber.id_banco_conta_corrente = Convert.ToInt32(dr["id_banco_conta_corrente"].ToString());
                                            o_tb_conta_receber.id_cadastro = Convert.ToInt32(dr["id_cadastro"].ToString());
                                            o_tb_conta_receber.id_centro_custo = Convert.ToInt32(dr["id_centro_custo"].ToString());
                                            o_tb_conta_receber.documento = dr["documento"].ToString();
                                            o_tb_conta_receber.descricao = dr["descricao"].ToString();
                                            o_tb_conta_receber.parcela = Convert.ToInt32(dr["parcela"].ToString());
                                            o_tb_conta_receber.valor_parcela = Convert.ToDecimal(dr["valor_parcela"].ToString());
                                            o_tb_conta_receber.valor_desconto = Convert.ToDecimal(dr["valor_desconto"].ToString());
                                            o_tb_conta_receber.valor_juro = Convert.ToDecimal(dr["valor_juro"].ToString());
                                            o_tb_conta_receber.valor_multa = Convert.ToDecimal(dr["valor_multa"].ToString());
                                            o_tb_conta_receber.valor_pago = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(dr["valor_pago"].ToString()));
                                            o_tb_conta_receber.valor_total = Convert.ToDecimal(dr["valor_total"].ToString());
                                            o_tb_conta_receber.valor_saldo = Convert.ToDecimal(dr["valor_saldo"].ToString());
                                            o_tb_conta_receber.dias_atraso = Convert.ToInt32(dr["dias_atraso"].ToString());
                                            o_tb_conta_receber.dt_emissao = Convert.ToDateTime(dr["dt_emissao"].ToString());
                                            o_tb_conta_receber.dt_cartorio = null;
                                            o_tb_conta_receber.dt_cancelamento = null;
                                            o_tb_conta_receber.dias_atraso = 0;
                                            o_tb_conta_receber.dt_vencimento = Convert.ToDateTime(dr["dt_vencimento"].ToString());
                                            o_tb_conta_receber.dt_pagamento = dr["dt_pagamento"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["dt_pagamento"].ToString());
                                            o_tb_conta_receber.id_tipo_situacao_financeira = Convert.ToInt32(dr["id_tipo_situacao_financeira"].ToString());
                                            o_tb_conta_receber.sit_pago = Convert.ToBoolean(dr["sit_pago"].ToString());
                                            b_tb_conta_receber.Incluir(o_tb_conta_receber);

                                        }                                        

                                    }
                                    else
                                    {

                                        // CONTA RECEBER
                                        foreach (DataRow dr in b_tb_conta_receber.Dt_conta_receber.Rows)
                                        {

                                            o_tb_conta_receber.id_empresa = Convert.ToInt32(dr["id_empresa"].ToString());
                                            o_tb_conta_receber.id_conta_contabil = Convert.ToInt32(dr["id_conta_contabil"].ToString());
                                            o_tb_conta_receber.id_tipo_especie = null;
                                            o_tb_conta_receber.id_banco_conta_corrente = Convert.ToInt32(dr["id_banco_conta_corrente"].ToString());
                                            o_tb_conta_receber.id_cadastro = Convert.ToInt32(dr["id_cadastro"].ToString());
                                            o_tb_conta_receber.id_centro_custo = Convert.ToInt32(dr["id_centro_custo"].ToString());
                                            o_tb_conta_receber.documento = dr["documento"].ToString();
                                            o_tb_conta_receber.descricao = dr["descricao"].ToString();
                                            o_tb_conta_receber.parcela = Convert.ToInt32(dr["parcela"].ToString());
                                            o_tb_conta_receber.valor_parcela = Convert.ToDecimal(dr["valor_parcela"].ToString());
                                            o_tb_conta_receber.valor_desconto = Convert.ToDecimal(dr["valor_desconto"].ToString());
                                            o_tb_conta_receber.valor_juro = Convert.ToDecimal(dr["valor_juro"].ToString());
                                            o_tb_conta_receber.valor_multa = Convert.ToDecimal(dr["valor_multa"].ToString());
                                            o_tb_conta_receber.valor_pago = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(dr["valor_pago"].ToString()));
                                            o_tb_conta_receber.valor_total = Convert.ToDecimal(dr["valor_total"].ToString());
                                            o_tb_conta_receber.valor_saldo = Convert.ToDecimal(dr["valor_saldo"].ToString());
                                            o_tb_conta_receber.dias_atraso = Convert.ToInt32(dr["dias_atraso"].ToString());
                                            o_tb_conta_receber.dt_emissao = Convert.ToDateTime(dr["dt_emissao"].ToString());
                                            o_tb_conta_receber.dt_cartorio = null;
                                            o_tb_conta_receber.dt_cancelamento = null;
                                            o_tb_conta_receber.dias_atraso = 0;
                                            o_tb_conta_receber.dt_vencimento = Convert.ToDateTime(dr["dt_vencimento"].ToString());
                                            o_tb_conta_receber.dt_pagamento = dr["dt_pagamento"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["dt_pagamento"].ToString());
                                            o_tb_conta_receber.id_tipo_situacao_financeira = Convert.ToInt32(dr["id_tipo_situacao_financeira"].ToString());
                                            o_tb_conta_receber.sit_pago = Convert.ToBoolean(dr["sit_pago"].ToString());
                                            b_tb_conta_receber.Incluir(o_tb_conta_receber);
                                            
                                        }                                        

                                    }            
                            }


                            IncluirPedidoHistorico(string.Format("Login {0} fechou o Pedido", PUB_SESSAO.Login));

                            msg = "Pedido Nº " + id_pedido + " foi fechado com sucesso.";
                            Master.MSG_ALERTA(msg, string.Format("pedido_visualizar.aspx?id={0}&id_operacao={1}", id_pedido, DDL_ID_OPERACAO.SelectedValue), false);

                            scope.Complete();

                        }

                    }
                }
                else
                {
                    Master.MSG_ALERTA("É necessário incluir um produto para salvar o pedido.");
                }





            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                msg = "Erro ao tentar salvar o pedido detalhe do erro - " + ex.Message;
                Master.MSG_ERRO(msg);

            }

        }

        protected void GRV_TB_PEDIDO_ITEM_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GRV_TB_PEDIDO_ITEM.PageIndex = e.NewPageIndex;
            PUB_PAGINACAO.PageIndex = e.NewPageIndex;
            CarregaGrid();
        }

        protected void IMG_BTN_PRIMEIRO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = 0;
            CarregaGrid();
        }

        protected void IMG_BTN_ANTERIOR_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex - 1;
            CarregaGrid();
        }

        protected void IMG_BTN_PROXIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex + 1;
            CarregaGrid();
        }

        protected void IMG_BTN_ULTIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.TotalDePaginas - 1;
            CarregaGrid();
        }

        protected void DDL_ID_FORMA_PAGAMENTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                {
                    b_tb_condicao_pagamento.PreencheControle(DDL_ID_CONDICAO_PAGAMENTO, string.Format("tb_condicao_pagamento.id_forma_pagamento = {0}", DDL_ID_FORMA_PAGAMENTO.SelectedValue), "", false);

                    if (DDL_ID_CONDICAO_PAGAMENTO.Items.Count == 0)
                    {
                        Master.MSG_ALERTA("Erro ao tentar carregar condicao de pagamento, verifique a relação forma de pagamento x condição de pagamento.");
                    }
                }
            }
            catch (Exception)
            {

                throw;
            }

        }

        protected void IMG_BTN_EXCLUIR_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                ImageButton btn = (ImageButton)sender;

                int id = 0;
                if (btn != null)
                {
                    id = Convert.ToInt32(btn.CommandArgument);

                    using (TransactionScope scope = new TransactionScope())
                    {
                        o_tb_pedido_item = b_tb_pedido_item.SelecionarObjetoPorId(id);
                        b_tb_pedido_item.Excluir(o_tb_pedido_item);
                        AtualizaTotalPedido();
                        TotalPedido();
                        CarregaGrid();
                    }


                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        private void AtualizaTotalPedido()
        {
            b_tb_pedido_item.AtualizaTotalPedido(Convert.ToInt32(HF_ID.Value));
        }


        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect(string.Format("default.aspx?id_operacao={0}", id_operacao), false);
        }

        protected void DDL_ID_EMPRESA_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
            {
                b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, string.Format("tb_banco_conta_corrente.id_empresa = {0}", DDL_ID_EMPRESA.SelectedValue), "", true);

                b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, true);
            }
        }

        protected void CHK_GERAR_FINANCEIRO_CheckedChanged(object sender, EventArgs e)
        {
            if (CHK_GERAR_FINANCEIRO.Checked)
            {
                PNL_GERAR_FINANCEIRO.Visible = true;
            }
            else
            {
                PNL_GERAR_FINANCEIRO.Visible = false;
            }
        }

        private void IncluirContaReceber()
        {
            try
            {

                if (Convert.ToDecimal(TXT_VALOR_SALDO.Text) > 0 && DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty && DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                {

                    int id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
                    int id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);
                    int id_conta_contabil = Convert.ToInt32(DDL_ID_CONTA_CONTABIL.SelectedValue);
                    int id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
                    int id_banco_conta_corrente = Convert.ToInt32(DDL_ID_BANCO_CONTA_CORRENTE.SelectedValue);
                    int id_centro_custo = Convert.ToInt32(DDL_ID_CENTRO_CUSTO.SelectedValue);
                    string documento = string.Empty;
                    string descricao = string.Empty;
                    decimal valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                    int id_pedido = Convert.ToInt32(HF_ID.Value);
                    int id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
                    decimal valor_total_pedido = Convert.ToDecimal(TXT_VALOR_TOTAL_PEDIDO.Text);
                    decimal valor_lancado = 0;


                    valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);


                    List<int> lista_prazo = b_tb_condicao_pagamento_prazo.ListaPrazo(id_condicao_pagamento);


                    o_tb_conta_receber.dias_atraso = 0;
                    o_tb_conta_receber.documento = id_pedido.ToString();
                    o_tb_conta_receber.dt_cancelamento = null;
                    o_tb_conta_receber.dt_cartorio = null;
                    o_tb_conta_receber.dt_emissao = DateTime.Now;
                    o_tb_conta_receber.id_banco_conta_corrente = id_banco_conta_corrente;
                    o_tb_conta_receber.id_centro_custo = id_centro_custo;
                    o_tb_conta_receber.id_tipo_especie = 0;
                    o_tb_conta_receber.id_conta_contabil = id_conta_contabil;
                    o_tb_conta_receber.id_controle = 0;
                    o_tb_conta_receber.id_empresa = id_empresa;
                    o_tb_conta_receber.id_cadastro = id_cadastro;
                    o_tb_conta_receber.valor_desconto = 0;
                    o_tb_conta_receber.valor_juro = 0;
                    o_tb_conta_receber.valor_multa = 0;



                    if (Equals(id_forma_pagamento, (int)PUB_ENUM.FORMA_PAGAMENTO.AVISTA))
                    {
                        o_tb_conta_receber.sit_pago = true;
                        o_tb_conta_receber.parcela = 0;
                        o_tb_conta_receber.dt_vencimento = DateTime.Now;
                        o_tb_conta_receber.dt_pagamento = DateTime.Now;
                        o_tb_conta_receber.valor_pago = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_receber.valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_receber.valor_saldo = valor_total_pedido - valor_parcela;
                        o_tb_conta_receber.valor_total = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_receber.descricao = string.Format("Lançamento Ref. Pedido Nº {0}", id_pedido);
                        o_tb_conta_receber.id_tipo_situacao_financeira = (int)PUB_ENUM.TIPO_SITUACAO_FINANCEIRA.PAGO;
                        b_tb_conta_receber.PreencheDataTable(b_tb_conta_receber.Dt_conta_receber, o_tb_conta_receber);

                        TXT_VALOR_SALDO.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaPagar()).ToString());
                        TXT_VALOR_PARCELA.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaPagar()).ToString());


                    }
                    else
                    {

                        var obj = b_tb_conta_receber.Dt_conta_receber.Compute("SUM(valor_parcela)", "");
                        if (obj != null)
                        {
                            valor_lancado = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(obj.ToString()));
                        }
                        // divide o valor das parcelas
                        valor_parcela = valor_total_pedido - valor_lancado;
                        valor_parcela = valor_parcela / lista_prazo.Count;

                        for (int i = 1; i <= lista_prazo.Count; i++)
                        {
                            o_tb_conta_receber.sit_pago = false;
                            o_tb_conta_receber.parcela = i;
                            o_tb_conta_receber.valor_pago = 0;
                            o_tb_conta_receber.valor_parcela = valor_parcela;
                            o_tb_conta_receber.valor_saldo = valor_parcela;
                            o_tb_conta_receber.valor_total = valor_parcela;
                            o_tb_conta_receber.dt_vencimento = DateTime.Now.AddDays(lista_prazo[i]);
                            o_tb_conta_receber.dt_pagamento = null;
                            o_tb_conta_receber.id_tipo_situacao_financeira = (int)PUB_ENUM.TIPO_SITUACAO_FINANCEIRA.ABERTO;
                            o_tb_conta_receber.descricao = string.Format("Lançamento Ref. Pedido Nº {0}, Parcela Nº {1} de {2}", id_pedido, o_tb_conta_receber.parcela, i);
                            b_tb_conta_receber.PreencheDataTable(b_tb_conta_receber.Dt_conta_receber, o_tb_conta_receber);

                        }

                        TXT_VALOR_SALDO.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaReceber()).ToString());
                        TXT_VALOR_PARCELA.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaReceber()).ToString());

                    }

                    GRV_TB_FINANCEIRO.DataSource = b_tb_conta_receber.Dt_conta_receber;
                    GRV_TB_FINANCEIRO.DataBind();

                    
                }
                else
                {
                    Master.MSG_ALERTA("O valor do saldo precisa ser maior que zero para fazer os lançamentos.");
                }




            }
            catch (Exception ex)
            {

                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar fazer os lançamentos das parcelas.");
            }

        }

        private void PreencheFinanceiroContaReceber()
        {
            try
            {
              
                GRV_TB_FINANCEIRO.DataSource = b_tb_conta_receber.Dt_conta_receber;
                GRV_TB_FINANCEIRO.DataBind();              

            }
            catch (Exception)
            {

                throw;
            }
        }

        private void PreencheFinanceiroContaPagar()
        {
            try
            {
                GRV_TB_FINANCEIRO.DataSource = b_tb_conta_pagar.Dt_conta_pagar;
                GRV_TB_FINANCEIRO.DataBind();

            }
            catch (Exception)
            {

                throw;
            }
        }

        private void IncluirContaPagar()
        {
            try
            {

                if (Convert.ToDecimal(TXT_VALOR_SALDO.Text) > 0 && DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty && DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                {

                    int id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
                    int id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);
                    int id_conta_contabil = Convert.ToInt32(DDL_ID_CONTA_CONTABIL.SelectedValue);
                    int id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
                    int id_banco_conta_corrente = Convert.ToInt32(DDL_ID_BANCO_CONTA_CORRENTE.SelectedValue);
                    int id_centro_custo = Convert.ToInt32(DDL_ID_CENTRO_CUSTO.SelectedValue);
                    string documento = string.Empty;
                    string descricao = string.Empty;
                    decimal valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                    int id_pedido = Convert.ToInt32(HF_ID.Value);
                    int id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
                    decimal valor_total_pedido = Convert.ToDecimal(TXT_VALOR_TOTAL_PEDIDO.Text);
                    decimal valor_lancado = 0;


                    valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);


                    List<int> lista_prazo = b_tb_condicao_pagamento_prazo.ListaPrazo(id_condicao_pagamento);


                    o_tb_conta_pagar.dias_atraso = 0;
                    o_tb_conta_pagar.documento = id_pedido.ToString();
                    o_tb_conta_pagar.dt_cancelamento = null;
                    o_tb_conta_pagar.dt_cartorio = null;
                    o_tb_conta_pagar.dt_emissao = DateTime.Now;
                    o_tb_conta_pagar.id_banco_conta_corrente = id_banco_conta_corrente;
                    o_tb_conta_pagar.id_centro_custo = id_centro_custo;
                    o_tb_conta_pagar.id_tipo_especie = 0;
                    o_tb_conta_pagar.id_conta_contabil = id_conta_contabil;                    
                    o_tb_conta_pagar.id_empresa = id_empresa;
                    o_tb_conta_pagar.id_cadastro = id_cadastro;
                    o_tb_conta_pagar.valor_desconto = 0;
                    o_tb_conta_pagar.valor_juro = 0;
                    o_tb_conta_pagar.valor_multa = 0;



                    if (Equals(id_forma_pagamento, (int)PUB_ENUM.FORMA_PAGAMENTO.AVISTA))
                    {
                        o_tb_conta_pagar.sit_pago = true;
                        o_tb_conta_pagar.parcela = 0;
                        o_tb_conta_pagar.dt_vencimento = DateTime.Now;
                        o_tb_conta_pagar.dt_pagamento = DateTime.Now;
                        o_tb_conta_pagar.valor_pago = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_pagar.valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_pagar.valor_saldo = valor_total_pedido - valor_parcela;
                        o_tb_conta_pagar.valor_total = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_pagar.descricao = string.Format("Lançamento Ref. Pedido Nº {0}", id_pedido);
                        o_tb_conta_pagar.id_tipo_situacao_financeira = (int)PUB_ENUM.TIPO_SITUACAO_FINANCEIRA.PAGO;
                        b_tb_conta_pagar.PreencheDataTable(b_tb_conta_pagar.Dt_conta_pagar, o_tb_conta_pagar);

                        TXT_VALOR_SALDO.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaPagar()).ToString());
                        TXT_VALOR_PARCELA.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaPagar()).ToString());


                    }
                    else
                    {

                        var obj = b_tb_conta_pagar.Dt_conta_pagar.Compute("SUM(valor_parcela)", "");
                        if (obj != null)
                        {
                            valor_lancado = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(obj.ToString()));
                        }
                        // divide o valor das parcelas
                        valor_parcela = valor_total_pedido - valor_lancado;
                        valor_parcela = valor_parcela / lista_prazo.Count;

                        for (int i = 1; i <= lista_prazo.Count; i++)
                        {
                            o_tb_conta_pagar.sit_pago = false;
                            o_tb_conta_pagar.parcela = i;
                            o_tb_conta_pagar.valor_pago = 0;
                            o_tb_conta_pagar.valor_parcela = valor_parcela;
                            o_tb_conta_pagar.valor_saldo = valor_parcela;
                            o_tb_conta_pagar.valor_total = valor_parcela;
                            o_tb_conta_pagar.dt_vencimento = DateTime.Now.AddDays(lista_prazo[i]);
                            o_tb_conta_pagar.dt_pagamento = null;
                            o_tb_conta_pagar.id_tipo_situacao_financeira = (int)PUB_ENUM.TIPO_SITUACAO_FINANCEIRA.ABERTO;
                            o_tb_conta_pagar.descricao = string.Format("Lançamento Ref. Pedido Nº {0}, Parcela Nº {1} de {2}", id_pedido, o_tb_conta_receber.parcela, i);
                            b_tb_conta_pagar.PreencheDataTable(b_tb_conta_pagar.Dt_conta_pagar, o_tb_conta_pagar);

                        }

                        TXT_VALOR_SALDO.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaReceber()).ToString());
                        TXT_VALOR_PARCELA.Text = PUB_FUNCOES.FormataNumerico((valor_total_pedido - TotalLancadoContaReceber()).ToString());

                    }
                }
                else
                {
                    Master.MSG_ALERTA("O valor do saldo precisa ser maior que zero para fazer os lançamentos.");
                }

            }
            catch (Exception ex)
            {

                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar fazer os lançamentos das parcelas.");
            }

        }

        private decimal TotalLancadoContaReceber()
        {
            decimal valor_lancado = 0;
            var obj = b_tb_conta_receber.Dt_conta_receber.Compute("SUM(valor_parcela)", "");

            if (obj != null)
            {
                valor_lancado = Convert.ToDecimal(obj.ToString());
            }
            return valor_lancado;
        }

        private decimal TotalLancadoContaPagar()
        {
            decimal valor_lancado = 0;
            var obj = b_tb_conta_pagar.Dt_conta_pagar.Compute("SUM(valor_parcela)", "");

            if (obj != null)
            {
                valor_lancado = Convert.ToDecimal(obj.ToString());
            }
            return valor_lancado;
        }


        protected void BTN_INCLUIR_PAGAMENTO_Click(object sender, EventArgs e)
        {
            try
            {
                if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                {
                    IncluirContaPagar();
                    PreencheFinanceiroContaPagar();
                }
                else
                {
                    IncluirContaReceber();
                    PreencheFinanceiroContaReceber();
                    
                }
                
                
            }
            catch (Exception)
            {
                
                throw;
            }
          
        }

        protected void DDL_ID_CENTRO_CUSTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (DDL_ID_CENTRO_CUSTO.SelectedValue != string.Empty)
                {
                    b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, string.Format("tb_conta_contabil.id in (select id_conta_contabil from tb_centro_custo_conta_contabil  where id_centro_custo = {0})", DDL_ID_CENTRO_CUSTO.SelectedValue), "", false);

                    if (DDL_ID_CONTA_CONTABIL.Items.Count == 0)
                    {
                        Master.MSG_ALERTA("Erro ao tentar carregar a lista de conta contábil.. verifique a relação entre centro de custo x conta contabil.");
                    }
                }
            }
            catch (Exception)
            {

                throw;
            }

        }

        protected void IMG_BTN_EXCLUIR_PAGAMENTO_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton btn = (ImageButton)sender;

            int id_financeiro = 0;
            if (btn != null)
            {
                id_financeiro = Convert.ToInt32(btn.CommandArgument);

                if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                {
                    if (b_tb_conta_pagar.Dt_conta_pagar.Rows.Count > 0)
                    {
                        b_tb_conta_pagar.Dt_conta_pagar.Rows[id_financeiro].Delete();
                        b_tb_conta_pagar.Dt_conta_pagar.AcceptChanges();
                    }

                    PreencheFinanceiroContaPagar();
                }
                else
                {
                    if (b_tb_conta_receber.Dt_conta_receber.Rows.Count > 0)
                    {
                        b_tb_conta_receber.Dt_conta_receber.Rows[id_financeiro].Delete();
                        b_tb_conta_receber.Dt_conta_receber.AcceptChanges();
                    }
                    PreencheFinanceiroContaReceber();
                }
                
                
            }



            //BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
            //OBJ_TB_CONTA_PAGAR o_tb_conta_pagar = new OBJ_TB_CONTA_PAGAR();
            //BLL_TB_CONTA_PAGAR b_tb_conta_pagar = new BLL_TB_CONTA_PAGAR();
            //OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();

            //try
            //{
            //    ImageButton btn = (ImageButton)sender;

            //    if (DDL_ID_EMPRESA.SelectedValue != string.Empty && TXT_NUM_PEDIDO.Text != string.Empty)
            //    {
            //        int id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
            //        int id_pedido = Convert.ToInt32(TXT_NUM_PEDIDO.Text);

            //        if (btn != null)
            //        {
            //            int id = Convert.ToInt32(btn.CommandArgument);

            //            if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
            //            {
            //                o_tb_conta_pagar = b_tb_conta_pagar.SelecionarObjetoPorId(id);
            //                b_tb_conta_pagar.Excluir(o_tb_conta_pagar);
            //            }
            //            else
            //            {
            //                o_tb_conta_receber = b_tb_conta_receber.SelecionarObjetoPorId(id);
            //                b_tb_conta_receber.Excluir(o_tb_conta_receber);
            //            }

            //        }

            //        CarregaFinanceiro(id_empresa, id_pedido, id_operacao);


            //    }
            //    else
            //    {
            //        Master.MSG_ALERTA("É necessário selecionar a empresa.");
            //    }

            //}
            //catch (Exception)
            //{

            //    throw;
            //}
        }


        //private void Pagamento()
        //{
        //    if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
        //    {

        //        o_tb_conta_pagar.descricao = "Lançamento";

        //        b_tb_conta_pagar.PreencheDataTable(b_tb_conta_pagar.Dt_conta_pagar, o_tb_conta_pagar);
        //    }
        //    else
        //    {
        //        b_tb_conta_receber.PreencheDataTable(b_tb_conta_receber.Dt_conta_receber, o_tb_conta_receber);
        //    }





        //    try
        //    {
        //        if (CHK_GERAR_FINANCEIRO.Checked)
        //        {

        //            int id_pedido = 0;
        //            int id_empresa = 0;
        //            int id_cadastro = 0;
        //            int id_conta_contabil = 0;
        //            int id_forma_pagamento = 0;
        //            int id_centro_custo = 0;
        //            int id_condicao_pagamento = 0;
        //            int id_banco_conta_corrente = 0;
        //            decimal valor_parcela = 0;
        //            decimal valor_pedido = 0;

        //            using (TransactionScope scope = new TransactionScope())
        //            {
        //                o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

        //                id_pedido = o_tb_pedido.id;
        //                id_cadastro = o_tb_pedido.id_cadastro;
        //                id_empresa = o_tb_pedido.id_empresa;
        //                id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
        //                id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
        //                id_conta_contabil = Convert.ToInt32(DDL_ID_CONTA_CONTABIL.SelectedValue);
        //                id_centro_custo = Convert.ToInt32(DDL_ID_CENTRO_CUSTO.SelectedValue);
        //                id_banco_conta_corrente = Convert.ToInt32(DDL_ID_BANCO_CONTA_CORRENTE.SelectedValue);
        //                valor_parcela = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_PARCELA.Text));
        //                valor_pedido = o_tb_pedido.valor_total_pedido;

        //                if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
        //                {
        //                    b_tb_conta_pagar.Incluir(id_pedido, id_empresa, id_cadastro, id_forma_pagamento, id_condicao_pagamento, id_conta_contabil, id_centro_custo, id_banco_conta_corrente, valor_parcela, valor_pedido);

        //                }
        //                else
        //                {
        //                    b_tb_conta_receber.Incluir(id_pedido, id_empresa, id_cadastro, id_forma_pagamento, id_condicao_pagamento, id_conta_contabil, id_centro_custo, id_banco_conta_corrente, valor_parcela, valor_pedido);

        //                }

        //                CarregaFinanceiro(id_empresa, id_pedido, id_operacao);

        //                scope.Complete();

        //            }


        //        }
        //    }
        //    catch (Exception)
        //    {

        //        throw;
        //    }


        //}
    }

    

}